package com.neu.questionnaire_system.controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neu.questionnaire_system.beans.ResponseEntity;
import com.neu.questionnaire_system.entity.User;
import com.neu.questionnaire_system.service.UserService;
import com.neu.questionnaire_system.service.impl.UserServiceImpl;
import org.apache.commons.mail.EmailException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xingle
 * @since 2022-10-31
 * @version 2.0 2022-10-31 框架调整，在控制层加入跨域注解，同时内部逻辑有所调整。created by libo
 */
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
    @Autowired
    private UserServiceImpl userService;

    /**
     * created by libo 当前租户添加用户
     * @param map 接收到的data，json格式
     * @return 返回封装的对象
     */
    @RequestMapping(value = "/addUser")
    public ResponseEntity addUser(@RequestBody Map<String,Object> map) throws InvocationTargetException, IllegalAccessException {
        return userService.addUser(map);
    }

    /**
     * created by libo 控制层接收一个包含键值对的map。用来查询当前租户下的用户列表
     * @param map 接收到的data，包含当前租户的tid等信息
     * @return 返回封装状态信息和内容的对象
     */
    @RequestMapping("/showUser")
    public ResponseEntity showUser(@RequestBody Map<String,Object> map){
        return userService.showUser(map);
    }

    /**
     * created by libo 当前租户删除用户
     * @param map 需要删除的用户的用户名
     * @return 返回封装状态信息和内容的对象
     */
    @RequestMapping("/deleteUser")
    public ResponseEntity deleteUser(@RequestBody Map<String,Object> map){
        return userService.deleteUser(map);
    }

    /**
     * created by libo 当前租户查询自己用户，请求地址
     * @param map 传入的map包含userName、tid
     * @return 返回包含查询到用户信息的对象，包含userName、password、phone
     */
    @RequestMapping("/findUserByUserName")
    public ResponseEntity findUserByUserName(@RequestBody Map<String,Object> map){
        return userService.findUserByUserName(map);
    }

    /**
     * created by libo 更新用户信息，支持格式json
     * @param map 传入的map中包含userName、password、phone、uid
     * @return 返回信息
     */
    @RequestMapping("/updateUser")
    public ResponseEntity updateUserById(@RequestBody Map<String,Object> map){
        return userService.updateUser(map);
    }

    /**
     * created by libo 编辑用户信息确认以及判断
     * @param map 需要修改用户的名字
     * @return 返回统一的对象
     */
    @RequestMapping("/update")
    public ResponseEntity updateOk(@RequestBody Map<String,Object> map){
        return userService.update(map);
    }

    /**
     * created by libo 获取所有用户列表
     * @return 返回统一封装的对象
     */
    @RequestMapping("/showAllUser")
    public ResponseEntity showAllUser(){
        return userService.showAllUser();
    }

    /**
     * created by libo 管理员模糊查询用户
     * @param userName 输入的查询条件
     * @return 返回包含查询结果分页信息的统一对象
     */
    @RequestMapping("/findAllUserByLike")
    public ResponseEntity findByLike(String userName){
        return userService.findAllUserLike(userName);
    }

    /**
     * created by libo 用户登录
     * @param user 传入的用户实体类
     * @return 返回统一的对象
     */
    @RequestMapping("/userLogin")
    public ResponseEntity userLogin(@RequestBody User user){
        return userService.userLogin(user);
    }

    /**
     * created by libo 管理员管理用户登录权限
     * @param isLogin 登录权限，默认为1
     * @param userName 用户名
     * @return 返回统一封装的对象
     */
    @RequestMapping("/setIsLogin")
    public ResponseEntity setIsLogin(String isLogin,String userName){
        return userService.setIsLogin(isLogin,userName);
    }

    @RequestMapping("/sendUserEmail")
    public ResponseEntity sendUserEmail(@RequestBody Map<String,Object> map) throws EmailException {return userService.sendUserEmail(map);}


}
